Software applications provide the necessary logic that allows us to use computers in meaningful ways. Not surprisingly, innovation in computers is largely dependent on the software that supports it. Accordingly, software engineers spend a great deal of time and effort testing and developing the software that supports our uses and demands for computers.
A key aspect of developing and troubleshooting software is understanding the software's use of memory resources at the device. As software applications grow in complexity, they often use and require a greater amount of memory resources. Moreover, when the number of software applications running at a device increases, the amount of memory available for each software application generally decreases, precisely because the different software applications have to share a limited amount of memory at the device. Improperly managed memory resources can cause significant problems for the software application and the user. For example, data freed or overwritten while still in use can cause memory corruption, which typically causes the software application to crash, or worse, results in corrupted user data. Further, memory leaks can result when data is not properly freed after use. A memory leak can cause the software application to use ever-increasing amounts of memory, which can then exhaust the memory available and lead to poor system performance or a system crash. It is thus extremely important to track and intelligently manage the use of memory resources at the device.
Unfortunately, given the growing complexity of software applications and large number of processes typically running on a device, it is increasingly more difficult to accurately and efficiently track the use of memory resources at a device. Current solutions allow users to manage and monitor heap memory allocations at a device. However, these solutions are not capable of tracking virtual memory allocations and deallocations at the device. Accordingly, users are unable to effectively manage virtual memory at the device. Yet virtual memory is a very important memory resource used by most software applications to properly function, and its proper use and management can have a significant impact on the software application's performance and stability. In addition, current solutions do not provide an effective and efficient way to track, manage, and monitor memory allocation and deallocation events, or determine which events should be analyzed and treated as a pair. And the alternative of manually analyzing and pairing individual events can be a daunting task.